home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / gopherlib.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  6KB  |  233 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. '''Gopher protocol client interface.'''
  5. __all__ = [
  6.     'send_selector',
  7.     'send_query']
  8. DEF_SELECTOR = '1/'
  9. DEF_HOST = 'gopher.micro.umn.edu'
  10. DEF_PORT = 70
  11. A_TEXT = '0'
  12. A_MENU = '1'
  13. A_CSO = '2'
  14. A_ERROR = '3'
  15. A_MACBINHEX = '4'
  16. A_PCBINHEX = '5'
  17. A_UUENCODED = '6'
  18. A_INDEX = '7'
  19. A_TELNET = '8'
  20. A_BINARY = '9'
  21. A_DUPLICATE = '+'
  22. A_SOUND = 's'
  23. A_EVENT = 'e'
  24. A_CALENDAR = 'c'
  25. A_HTML = 'h'
  26. A_TN3270 = 'T'
  27. A_MIME = 'M'
  28. A_IMAGE = 'I'
  29. A_WHOIS = 'w'
  30. A_QUERY = 'q'
  31. A_GIF = 'g'
  32. A_HTML = 'h'
  33. A_WWW = 'w'
  34. A_PLUS_IMAGE = ':'
  35. A_PLUS_MOVIE = ';'
  36. A_PLUS_SOUND = '<'
  37. _names = dir()
  38. _type_to_name_map = { }
  39.  
  40. def type_to_name(gtype):
  41.     """Map all file types to strings; unknown types become TYPE='x'."""
  42.     if _type_to_name_map == { }:
  43.         for name in _names:
  44.             if name[:2] == 'A_':
  45.                 _type_to_name_map[eval(name)] = name[2:]
  46.                 continue
  47.         
  48.     
  49.     if gtype in _type_to_name_map:
  50.         return _type_to_name_map[gtype]
  51.     
  52.     return 'TYPE=%r' % (gtype,)
  53.  
  54. CRLF = '\r\n'
  55. TAB = '\t'
  56.  
  57. def send_selector(selector, host, port = 0):
  58.     '''Send a selector to a given host and port, return a file with the reply.'''
  59.     import socket as socket
  60.     if not port:
  61.         i = host.find(':')
  62.         if i >= 0:
  63.             host = host[:i]
  64.             port = int(host[i + 1:])
  65.         
  66.     
  67.     if not port:
  68.         port = DEF_PORT
  69.     elif type(port) == type(''):
  70.         port = int(port)
  71.     
  72.     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  73.     s.connect((host, port))
  74.     s.sendall(selector + CRLF)
  75.     s.shutdown(1)
  76.     return s.makefile('rb')
  77.  
  78.  
  79. def send_query(selector, query, host, port = 0):
  80.     '''Send a selector and a query string.'''
  81.     return send_selector(selector + '\t' + query, host, port)
  82.  
  83.  
  84. def path_to_selector(path):
  85.     '''Takes a path as returned by urlparse and returns the appropriate selector.'''
  86.     if path == '/':
  87.         return '/'
  88.     else:
  89.         return path[2:]
  90.  
  91.  
  92. def path_to_datatype_name(path):
  93.     '''Takes a path as returned by urlparse and maps it to a string.
  94.     See section 3.4 of RFC 1738 for details.'''
  95.     if path == '/':
  96.         return "TYPE='unknown'"
  97.     else:
  98.         return type_to_name(path[1])
  99.  
  100.  
  101. def get_directory(f):
  102.     '''Get a directory in the form of a list of entries.'''
  103.     entries = []
  104.     while None:
  105.         line = f.readline()
  106.         if not line:
  107.             print '(Unexpected EOF from server)'
  108.             break
  109.         
  110.         if line[-2:] == CRLF:
  111.             line = line[:-2]
  112.         elif line[-1:] in CRLF:
  113.             line = line[:-1]
  114.         
  115.         if line == '.':
  116.             break
  117.         
  118.         if not line:
  119.             print '(Empty line from server)'
  120.             continue
  121.         
  122.         gtype = line[0]
  123.         parts = line[1:].split(TAB)
  124.         if len(parts) < 4:
  125.             print '(Bad line from server: %r)' % (line,)
  126.             continue
  127.         
  128.         if len(parts) > 4:
  129.             if parts[4:] != [
  130.                 '+']:
  131.                 print '(Extra info from server:', parts[4:], ')'
  132.             
  133.         else:
  134.             parts.append('')
  135.         entries.append(parts)
  136.     return entries
  137.  
  138.  
  139. def get_textfile(f):
  140.     '''Get a text file as a list of lines, with trailing CRLF stripped.'''
  141.     lines = []
  142.     get_alt_textfile(f, lines.append)
  143.     return lines
  144.  
  145.  
  146. def get_alt_textfile(f, func):
  147.     '''Get a text file and pass each line to a function, with trailing CRLF stripped.'''
  148.     while None:
  149.         line = f.readline()
  150.         if not line:
  151.             print '(Unexpected EOF from server)'
  152.             break
  153.         
  154.         if line[-2:] == CRLF:
  155.             line = line[:-2]
  156.         elif line[-1:] in CRLF:
  157.             line = line[:-1]
  158.         
  159.         if line == '.':
  160.             break
  161.         
  162.         if line[:2] == '..':
  163.             line = line[1:]
  164.         
  165.  
  166.  
  167. def get_binary(f):
  168.     '''Get a binary file as one solid data block.'''
  169.     data = f.read()
  170.     return data
  171.  
  172.  
  173. def get_alt_binary(f, func, blocksize):
  174.     '''Get a binary file and pass each block to a function.'''
  175.     while None:
  176.         data = f.read(blocksize)
  177.         if not data:
  178.             break
  179.         
  180.  
  181.  
  182. def test():
  183.     '''Trivial test program.'''
  184.     import sys as sys
  185.     import getopt as getopt
  186.     (opts, args) = getopt.getopt(sys.argv[1:], '')
  187.     selector = DEF_SELECTOR
  188.     type = selector[0]
  189.     host = DEF_HOST
  190.     if args:
  191.         host = args[0]
  192.         args = args[1:]
  193.     
  194.     if args:
  195.         type = args[0]
  196.         args = args[1:]
  197.         if len(type) > 1:
  198.             type = type[0]
  199.             selector = type
  200.         else:
  201.             selector = ''
  202.             if args:
  203.                 selector = args[0]
  204.                 args = args[1:]
  205.             
  206.         query = ''
  207.         if args:
  208.             query = args[0]
  209.             args = args[1:]
  210.         
  211.     
  212.     if type == A_INDEX:
  213.         f = send_query(selector, query, host)
  214.     else:
  215.         f = send_selector(selector, host)
  216.     if type == A_TEXT:
  217.         lines = get_textfile(f)
  218.         for item in lines:
  219.             print item
  220.         
  221.     elif type in (A_MENU, A_INDEX):
  222.         entries = get_directory(f)
  223.         for item in entries:
  224.             print item
  225.         
  226.     else:
  227.         data = get_binary(f)
  228.         print 'binary data:', len(data), 'bytes:', repr(data[:100])[:40]
  229.  
  230. if __name__ == '__main__':
  231.     test()
  232.  
  233.